
import it.unisa.dia.gas.jpbc.Element;
import it.unisa.dia.gas.jpbc.Field;
import it.unisa.dia.gas.jpbc.Pairing;
import it.unisa.dia.gas.plaf.jpbc.pairing.PairingFactory;

import java.security.MessageDigest;

public class PKIE {

	public PKIE() {
	}

	// * 将int类型的数据转换为byte数组
	// * 原理：将int数据中的四个byte取出，分别存储
	public static byte[] intToBytes(int n) {
		byte[] b = new byte[4];
		for (int i = 0; i < 4; i++) {
			b[i] = (byte) (n >> (24 - i * 8));
		}
		return b;
	}

/*	public static void main(String[] args) {
		// -------------------------------------第一步 参数设置
		// 初始化双线性配对pairing
		Pairing pairing = PairingFactory.getPairing("a.properties");
		// 产生系统参数
		// 产生域G,GT,Zq
		Field G = pairing.getG1();
		Field GT = pairing.getGT();
		Field Zq = pairing.getZr();
		// 从G中初始化g,g2,h
		Element g = G.newRandomElement();
		Element g2 = G.newRandomElement();
		Element h = G.newRandomElement();
		// 初始化aa,a0,a1
		Element aa = Zq.newRandomElement();
		Element a0 = Zq.newRandomElement();
		Element a1 = Zq.newRandomElement();
		// 设置gg,g1,mst1,mst0的值
		Element gg = g2.powZn(aa);
		Element g1_temp = aa.add(a0);
		g1_temp = g1_temp.add(a1);
		Element g1 = g.powZn(g1_temp);
		Element mst1 = g2.powZn(a1);
		Element mst2 = g2.powZn(a0);
		// 计算Z的值
		Element Z = pairing.pairing(g, g);
		// 设置r10,r00,r01的值
		Element r10 = Zq.newRandomElement();
		Element r00 = Zq.newRandomElement();
		Element r01 = Zq.newRandomElement();
		// ----------------------第二步 秘钥产生KeyGen()
		// 产生H(0)，把它存在h0_after_hash中
		byte[] h0_before_hash = intToBytes(0);
		Element h0_after_hash = Zq.newZeroElement();// 随机数h0_after_hash
		try {
			MessageDigest digest = MessageDigest.getInstance("MD5");
			digest.update(h0_before_hash);
			byte[] dig = digest.digest();
			h0_after_hash.setFromHash(dig, 0, dig.length);// hash处理后存放到h里面
		} catch (Exception e) {
		}

		// 产生H(1)，把它存在h1_after_hash中
		byte[] h1_before_hash = intToBytes(1);
		Element h1_after_hash = Zq.newZeroElement();// 随机数h1_after_hash
		try {
			MessageDigest digest = MessageDigest.getInstance("MD5");
			digest.update(h1_before_hash);
			byte[] dig = digest.digest();
			h1_after_hash.setFromHash(dig, 0, dig.length);// hash处理后存放到h里面
		} catch (Exception e) {
		}
		// 利用一个gen_temp存放计算中间值
		// Element gen_temp
		// 计算g1的H(0)次方

	}
*/
}